<HTML>
<HEAD>
<TITLE>
DatoIndice.cpp
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="blue">#include</font> <font color="maroon">"DatoIndice.h"</font>

DatoIndice<font color="black">:</font><font color="black">:</font>DatoIndice<font color="black">(</font>SecondaryKey <font color="black">*</font>secondaryKey, PrimaryKey <font color="black">*</font>primaryKey<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>secondaryKey<font color="black">=</font>secondaryKey;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>primaryKey<font color="black">=</font>primaryKey;
<font color="black">}</font>

<font color="blue">int</font> DatoIndice<font color="black">:</font><font color="black">:</font>CompararClave<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>DatoBuscado, <font color="blue">char</font> <font color="black">*</font>InformacionIndexada<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> claveBuscada<font color="black">=</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font>GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    CargaClave<font color="black">(</font>claveBuscada,DatoBuscado<font color="black">)</font>;


    <font color="blue">int</font> comparacion<font color="black">=</font>memcmp<font color="black">(</font>claveBuscada,InformacionIndexada,GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

    free<font color="black">(</font>claveBuscada<font color="black">)</font>;

    <font color="blue">return</font> comparacion;
<font color="black">}</font>

<font color="blue">int</font> DatoIndice<font color="black">:</font><font color="black">:</font>CompararID<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>DatoBuscado, <font color="blue">char</font> <font color="black">*</font>InformacionIndexada<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> IDBuscada<font color="black">=</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font>GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    CargarID<font color="black">(</font>IDBuscada,DatoBuscado,<font color="maroon">0</font><font color="black">)</font>;

    <font color="blue">int</font> comparacion<font color="black">=</font>memcmp<font color="black">(</font>IDBuscada,InformacionIndexada<font color="black">+</font>GetTamanioClave<font color="black">(</font><font color="black">)</font>,GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

    free<font color="black">(</font>IDBuscada<font color="black">)</font>;

    <font color="blue">return</font> comparacion;
<font color="black">}</font>
<font color="green">/*
int DatoIndice::CompararID(int IdBuscado,int IdIndexado)
{
    char* IDBuscada=(char*) malloc(GetTamanioID());
    CargarID(IDBuscada,NULL,IdBuscado);
    char* IDIndexada=(char*) malloc(GetTamanioID());
    CargarID(IDIndexada,NULL,IdIndexado);

    int comparacion=memcmp(IDBuscada,IDIndexada,GetTamanioClave());

    free(IDBuscada);
    free(IDIndexada);

    return comparacion;
}
*/</font>
<font color="blue">char</font> <font color="black">*</font>DatoIndice<font color="black">:</font><font color="black">:</font>GetDato<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>dato, <font color="blue">unsigned</font> <font color="blue">int</font> id<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> aux<font color="black">=</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font>GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">+</font>GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    memset<font color="black">(</font>aux,<font color="maroon">0</font>,GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">+</font>GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

    CargaClave<font color="black">(</font>aux, dato<font color="black">)</font>;

    CargarID<font color="black">(</font>aux<font color="black">+</font>GetTamanioClave<font color="black">(</font><font color="black">)</font>, dato, id<font color="black">)</font>;

    <font color="blue">return</font> aux;
<font color="black">}</font>


<font color="blue">int</font> DatoIndice<font color="black">:</font><font color="black">:</font>CompararClave<font color="black">(</font><font color="blue">const</font> <font color="blue">char</font> <font color="black">*</font>clave, <font color="blue">int</font> tamanio, <font color="blue">char</font> <font color="black">*</font>InformacionIndexada<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> claveBuscada<font color="black">=</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font>GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    memset<font color="black">(</font>claveBuscada,<font color="maroon">0</font>,GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    memcpy<font color="black">(</font>claveBuscada,clave,tamanio<font color="black">)</font>;


    <font color="blue">int</font> comparacion<font color="black">=</font>memcmp<font color="black">(</font>claveBuscada,InformacionIndexada,GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

    free<font color="black">(</font>claveBuscada<font color="black">)</font>;

    <font color="blue">return</font> comparacion;
<font color="black">}</font>

DatoIndice<font color="black">:</font><font color="black">:</font>~DatoIndice<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
<font color="black">}</font>

<font color="blue">int</font> DatoIndice<font color="black">:</font><font color="black">:</font>GetTamanioID<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>EsPrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
        <font color="blue">return</font> <font color="maroon">4</font>;
    <font color="blue">return</font> primaryKey<font color="black">-</font><font color="black">&#62;</font>GetTamanio<font color="black">(</font><font color="black">)</font>;
<font color="black">}</font>



<font color="blue">int</font> DatoIndice<font color="black">:</font><font color="black">:</font>GetTamanioClave<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>EsPrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
        <font color="blue">return</font> primaryKey<font color="black">-</font><font color="black">&#62;</font>GetTamanio<font color="black">(</font><font color="black">)</font>;
    <font color="blue">return</font> secondaryKey<font color="black">-</font><font color="black">&#62;</font>GetTamanio<font color="black">(</font><font color="black">)</font>;
<font color="black">}</font>



<font color="blue">bool</font> DatoIndice<font color="black">:</font><font color="black">:</font>EsPrimario<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">return</font> secondaryKey<font color="black">=</font><font color="black">=</font>NULL;
<font color="black">}</font>

Key <font color="black">*</font>DatoIndice<font color="black">:</font><font color="black">:</font>GetKey<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>EsPrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
        <font color="blue">return</font> primaryKey;
    <font color="blue">return</font> secondaryKey;
<font color="black">}</font>

<font color="blue">unsigned</font> <font color="blue">int</font> DatoIndice<font color="black">:</font><font color="black">:</font>GetID<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>informacion<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">unsigned</font> <font color="blue">int</font> id;
    memcpy<font color="black">(</font><font color="black">&</font>id, informacion<font color="black">+</font>GetTamanioClave<font color="black">(</font><font color="black">)</font>,<font color="maroon">4</font><font color="black">)</font>;
    <font color="blue">return</font> id;
<font color="black">}</font>

<font color="blue">char</font> <font color="black">*</font>DatoIndice<font color="black">:</font><font color="black">:</font>GetClavePrimaria<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>informacion<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">char</font><font color="black">*</font> clave<font color="black">=</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font> malloc<font color="black">(</font>GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    memcpy<font color="black">(</font>clave,informacion<font color="black">+</font>GetTamanioClave<font color="black">(</font><font color="black">)</font>,GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    <font color="blue">return</font> clave;
<font color="black">}</font>

<font color="blue">void</font> DatoIndice<font color="black">:</font><font color="black">:</font>CargarID<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>destino, <font color="blue">char</font> <font color="black">*</font>informacion, <font color="blue">unsigned</font> <font color="blue">int</font> id<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>EsPrimario<font color="black">(</font><font color="black">)</font><font color="black">)</font>
    <font color="black">{</font>
        memcpy<font color="black">(</font>destino,<font color="black">&</font> id,<font color="maroon">4</font><font color="black">)</font>;
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        <font color="blue">int</font> tamanio;
        <font color="blue">char</font><font color="black">*</font> clave<font color="black">=</font>primaryKey<font color="black">-</font><font color="black">&#62;</font>GetKey<font color="black">(</font>informacion,tamanio<font color="black">)</font>;
        memcpy<font color="black">(</font>destino,clave,tamanio<font color="black">&#60;</font>GetTamanioID<font color="black">(</font><font color="black">)</font>? tamanio<font color="black">:</font>GetTamanioID<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
        free<font color="black">(</font>clave<font color="black">)</font>;
    <font color="black">}</font>
<font color="black">}</font>



<font color="blue">void</font> DatoIndice<font color="black">:</font><font color="black">:</font>CargaClave<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>destino, <font color="blue">char</font> <font color="black">*</font>informacion<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">int</font> tamanio;

    <font color="blue">char</font><font color="black">*</font> clave<font color="black">=</font>GetKey<font color="black">(</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>GetKey<font color="black">(</font>informacion,tamanio<font color="black">)</font>;
    memcpy<font color="black">(</font>destino,clave,tamanio<font color="black">&#60;</font>GetTamanioClave<font color="black">(</font><font color="black">)</font>? tamanio<font color="black">:</font>GetTamanioClave<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    free<font color="black">(</font>clave<font color="black">)</font>;
<font color="black">}</font>







</PRE>
</BODY>
</HTML>
